/**
 * @description account 服务层
 * @author LI
 */

const { DecoratItemInfo, DecoratItem } = require('../db/model/index')
const Sequelize = require('sequelize')
const { formatMoreTime } = require('../utils/dateTime')

/**
 * 创建商品图片信息
 * @param {number} goodsInfoId 商品信息 id
 * @param {string} decoratItemId 项目 id
 * @param {number} itemNumber 项目数量
 * @param {number} itemPrice 人工辅料/单价
 */
async function createDecoratitemInfo({ goodsInfoId, decoratItemId, itemNumber, itemPrice }) {
  const result = await DecoratItemInfo.create({
    goodsInfoId,
    decoratItemId,
    itemNumber,
    itemPrice,
  })

  return result
}

/**
 * 获取全部商品图片信息
 * @param {string} goodsInfoId 商品信息 id
 * @param {number} page 第几页
 * @param {number} limit 多少条
 */
async function getDecoratitemInfosList({ goodsInfoId, page = 1, limit = 10 }) {
  // 拼接查询条件
  const whereData = {}
  if (goodsInfoId) {
    whereData.goodsInfoId = goodsInfoId
  }

  const result = await DecoratItemInfo.findAndCountAll({
    limit: limit, // 每页多少条
    offset: limit * (page - 1), // 跳过多少条
    where: whereData,
    include: [
      {
        model: DecoratItem,
        where: { id: Sequelize.col('decoratItemInfo.decoratItemId') }
      }
    ]
  })

  result.rows.map(item => {
    // 格式化时间 多个
    item.dataValues = formatMoreTime(item.dataValues)
    item.dataValues.itemSn = item.dataValues.decoratItem.itemSn
    item.dataValues.itemName = item.dataValues.decoratItem.itemName
    item.dataValues.itemUnit = item.dataValues.decoratItem.itemUnit
    item.dataValues.itemRemark = item.dataValues.decoratItem.itemRemark
    delete item.dataValues.decoratItem
  })

  return result
}

/**
 * 通过 id 更新商品项目信息
 * @param {number} id id
 * @param {number} itemNumber 项目数量
 * @param {number} itemPrice 人工辅料/单价
 */
async function updateDecoratitemInfoById({ id, itemNumber, itemPrice }) {
  // 拼接修改内容
  const updateData = {}
  if (itemNumber) {
    updateData.itemNumber = itemNumber
  }
  if (itemPrice) {
    updateData.itemPrice = itemPrice
  }
  const result = await DecoratItemInfo.update(updateData, {
    where: { id }
  })

  return result[0] > 0
}

/**
 * 通过 id 删除项目信息
 * @param {number} id id
 */
async function deleteDecoratitemInfoById(id) {
  const result = await DecoratItemInfo.destroy({
    where: { id }
  })

  return result > 0
}

module.exports = {
  createDecoratitemInfo,
  getDecoratitemInfosList,
  updateDecoratitemInfoById,
  deleteDecoratitemInfoById
}
